package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import com.example.demo.tenant.TenantContext;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private final UserRepository userRepository;

    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    // 创建用户，租户信息从请求头 X-Tenant-ID 获取
    @PostMapping
    public User createUser(@RequestBody User user, @RequestHeader("X-Tenant-ID") Long tenantId) {
        // 设置当前租户 ID
        TenantContext.setTenantId(tenantId);

        // 设置 tenantId 到用户对象
        user.setTenantId(tenantId);

        // 保存用户
        return userRepository.save(user);
    }

    // 获取所有用户，租户信息从请求头 X-Tenant-ID 获取
    @GetMapping
    public List<User> getAllUsers(@RequestHeader("X-Tenant-ID") Long tenantId) {
        // 设置当前租户 ID
        TenantContext.setTenantId(tenantId);

        // 获取所有用户（可以根据 tenantId 过滤）
        return userRepository.findAll();
    }

    // 获取单个用户，使用用户 ID
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id, @RequestHeader("X-Tenant-ID") Long tenantId) {
        // 设置当前租户 ID
        TenantContext.setTenantId(tenantId);

        // 根据 ID 获取用户
        Optional<User> user = userRepository.findById(id);
        return user.orElse(null);
    }

    // 更新用户
    @PutMapping("/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User updatedUser, @RequestHeader("X-Tenant-ID") Long tenantId) {
        // 设置当前租户 ID
        TenantContext.setTenantId(tenantId);

        // 获取现有用户
        Optional<User> existingUser = userRepository.findById(id);
        if (existingUser.isPresent()) {
            User user = existingUser.get();
            user.setName(updatedUser.getName());
            // 更新租户信息
            user.setTenantId(tenantId);
            return userRepository.save(user);
        }
        return null;
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id, @RequestHeader("X-Tenant-ID") Long tenantId) {
        // 设置当前租户 ID
        TenantContext.setTenantId(tenantId);

        // 删除用户
        userRepository.deleteById(id);
    }
}

